package top.infopub.job.bpa.dao;


import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import top.infopub.generic.GenericDao;
import top.infopub.job.bpa.domain.GrossProfitDomain;
import top.infopub.model.bpa.OutcaeSure;


/** 对外建安产值确权(BPA_OUTCAE_SURE) **/
public interface OutcaeSureDao extends GenericDao<OutcaeSure, String> {

    /** codegen **/

    /**
     * 查询某个项目 当月对外确权金额(下浮后）
     * @param where sureMonth，proCode
     * @return 
     * @see
     */
    BigDecimal selectProQaOfOutSure(Map<String, Object> where);
    
    /**
     * 查询某个项目 当月对外确权金额(下浮前）
     * @param where sureMonth，proCode
     * @return 
     * @see
     */
    BigDecimal selectProQaOfOutSureBefore(Map<String, Object> where);

    /**
     * 查询某个区域 当月对外确权金额(下浮后）
     * @param where sureMonth，hrOrgAreaId
     * @return 
     * @see
     */
    BigDecimal selectAreaQaOfOutSure(Map<String, Object> where);

    /**
     * 汇总所有项目 当月对外确权金额(下浮后）   排除hr_org_pro_id为null<项目与公司未绑定>
     * @param where sureMonth
     * @return 
     * @see
     */
    BigDecimal selectAllProQaOfOutSure(Map<String, Object> where);

    /**
     * 查询某个项目  建安毛利  -- 子项的 当月对外确权金额（下浮前） 对外下浮率   子项名称 
     * @param where sureMonth，proCode
     * @return 
     * @see
     */
    List<GrossProfitDomain> selectProQaOfGrossProfit(Map<String, Object> where);

    // 1. 带入项目【分包合同】（可能需查多个合同）子项对应{对内下浮率}
    // 2. 带入项目【内部协议】子项对应{对内下浮率}
    // 3. 若无对应子项，为0
    /**
     * 查询项目【分包合同】 子项对应{对内下浮率}，不存在则返回null
     * @param where proCode subName
     * @return 
     * @see
     */
    BigDecimal selectRateFromSubpackCot(Map<String, Object> where);

    /**
     * 查询项目【内部协议】子项对应{对内下浮率}，不存在则返回null
     * @param where proCode subName
     * @return 
     * @see
     */
    BigDecimal selectRateFromInnerAgrt(Map<String, Object> where);
    
    /**
     * 查询是否存在项目所处阶段
     */
    int count(@Param("proCode")String proCode);

}